// 动态发布相关API
import type { Data } from './index'

/**
 * 发送照片动态接口 - 单张照片
 * 对应后端 @PostMapping("/sendphone")
 * @param id 用户ID
 * @param content 动态内容
 * @param filePath 文件路径
 */
export const sendPhonePost = (id: number, content: string, filePath: string): Promise<any> => {
  const token = uni.getStorageSync('token')

  return new Promise((resolve, reject) => {
    uni.uploadFile({
      url: '/api/post/sendphone',
      filePath: filePath,
      name: 'file',
      formData: {
        id: id.toString(),
        content: content,
      },
      header: {
        token: token,
      },
      success: (res) => {
        try {
          const data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
          resolve(data)
        } catch (e) {
          reject(new Error('解析响应数据失败'))
        }
      },
      fail: (err) => {
        reject(err)
      },
    })
  })
}

/**
 * 批量发送照片动态
 * 通过多次调用sendPhonePost接口实现多张照片上传
 * @param id 用户ID
 * @param content 动态内容
 * @param filePaths 文件路径数组
 */
export const sendMultiplePhonePost = async (
  id: number,
  content: string,
  filePaths: string[],
): Promise<any[]> => {
  if (!filePaths || filePaths.length === 0) {
    return Promise.reject(new Error('没有选择照片'))
  }

  // 使用Promise.all同时处理多个上传请求
  const uploadPromises = filePaths.map((path, index) => {
    // 只在第一张照片中附加文本内容，避免重复
    const postContent = index === 0 ? content : ''
    return sendPhonePost(id, postContent, path)
  })

  return Promise.all(uploadPromises)
}

/**
 * 发送视频动态接口
 * @param id 用户ID
 * @param content 动态内容
 * @param filePath 视频文件路径
 */
export const sendVideoPost = (id: number, content: string, filePath: string): Promise<any> => {
  const token = uni.getStorageSync('token')

  return new Promise((resolve, reject) => {
    uni.uploadFile({
      url: '/api/post/sendvideo', // 假设有这样一个视频接口，实际使用时请根据实际接口修改
      filePath: filePath,
      name: 'file',
      formData: {
        id: id.toString(),
        content: content,
      },
      header: {
        token: token,
      },
      success: (res) => {
        try {
          const data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
          resolve(data)
        } catch (e) {
          reject(new Error('解析响应数据失败'))
        }
      },
      fail: (err) => {
        reject(err)
      },
    })
  })
}

/**
 * 发送纯文字动态接口
 * @param id 用户ID
 * @param content 动态内容
 */
export const sendTextPost = (
  id: number,
  content: string,
): Promise<UniApp.RequestSuccessCallbackResult> => {
  const token = uni.getStorageSync('token')

  return uni.request({
    url: '/api/post/sendtext', // 假设有这样一个纯文本接口，实际使用时请根据实际接口修改
    method: 'POST',
    data: {
      id: id,
      content: content,
    },
    header: {
      token: token,
      'Content-Type': 'application/json',
    },
  })
}
